using System;
using System.Collections.Generic;
using System.Text;
using EntidadesTO;
using System.Data;
using System.Data.SqlClient;

namespace AccesoDatos
{
    public class InformacionAbonosDA
    {
        public List<InformacionAbonosTO> ListarConFiltro(int pCodEnte, DateTime pFechaIni, DateTime pFechaFin)
        {
            List<InformacionAbonosTO> listaAbonos = new List<InformacionAbonosTO>();
            SqlDataReader reader = null;
            SqlCommand comando;
            ConexionBD instanciaConexion = ConexionBD.ObtenerInstancia();

            try
            {

                instanciaConexion.AbrirConexion();
                comando = new SqlCommand("sp_get_SEC_InformacionAbonos_filter", instanciaConexion.ObtenerConexion());
                comando.Parameters.AddWithValue("@pCodEnte", pCodEnte);

                if (pFechaIni != DateTime.MinValue)
                    comando.Parameters.AddWithValue("@pFechaIni", pFechaIni);
                else
                    comando.Parameters.AddWithValue("@pFechaIni", DBNull.Value);

                if (pFechaFin != DateTime.MinValue)
                    comando.Parameters.AddWithValue("@pFechaFin", pFechaFin);
                else
                    comando.Parameters.AddWithValue("@pFechaFin", DBNull.Value);
                
                comando.CommandType = CommandType.StoredProcedure;

                reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    InformacionAbonosTO informacionAbonosTO = new InformacionAbonosTO();

                    informacionAbonosTO.CodInformacionAbonos = reader.GetInt32(reader.GetOrdinal("codInformacionAbonos"));
                    informacionAbonosTO.FecAbono = reader.GetDateTime(reader.GetOrdinal("fecAbono"));
                    informacionAbonosTO.Monto = reader.GetDecimal(reader.GetOrdinal("monto"));
                    informacionAbonosTO.CodPersona = reader.GetInt32(reader.GetOrdinal("codPersona"));
                    informacionAbonosTO.CodEnte = reader.GetInt32(reader.GetOrdinal("codEnte"));
                    informacionAbonosTO.CodTImpuesto = reader.GetInt32(reader.GetOrdinal("codTImpuesto"));
                    informacionAbonosTO.CodPredio = reader.GetInt32(reader.GetOrdinal("codPredio"));
                    informacionAbonosTO.NumComprobante = reader.GetInt32(reader.GetOrdinal("numComprobante"));
                    informacionAbonosTO.Estado = reader.GetInt32(reader.GetOrdinal("estado"));
                    informacionAbonosTO.DesPersona = reader.GetString(reader.GetOrdinal("desPersona"));
                    informacionAbonosTO.DesEnte = reader.GetString(reader.GetOrdinal("desEnte"));
                    informacionAbonosTO.DesTImpuesto = reader.GetString(reader.GetOrdinal("desTImpuesto"));

                    listaAbonos.Add(informacionAbonosTO);
                }

                reader.Close();
                instanciaConexion.CerrarConexion();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                listaAbonos = null;

            }
            finally
            {
                if (reader != null)
                {
                    if (reader.IsClosed == false)
                        reader.Close();
                }
                if (instanciaConexion.ObtenerConexion().State != ConnectionState.Closed)
                {
                    instanciaConexion.CerrarConexion();
                }
            }

            return listaAbonos;

        }
    }
}
